blk-wbt: Fix io starvation in wbt_rqw_done()#82
blk-wbt: Fix io starvation in wbt_rqw_done()#82blktests-ci[bot] wants to merge 1 commit intolinus-master_basefrom
Conversation
|
Upstream branch: 260f6f4 |
f092a9b to
0b59764
Compare
|
Upstream branch: d6084bb |
ccc6583 to
f98f6c9
Compare
0b59764 to
aee5bd3
Compare
|
Upstream branch: 831462f |
f98f6c9 to
ae3d48a
Compare
aee5bd3 to
ef18525
Compare
|
Upstream branch: c93529a |
ae3d48a to
74b1e68
Compare
ef18525 to
3851b3f
Compare
|
Upstream branch: cbbf0a7 |
74b1e68 to
e66cc5c
Compare
3851b3f to
28b3384
Compare
|
Upstream branch: 6a68cec |
e66cc5c to
c42ed1c
Compare
28b3384 to
8ab9be5
Compare
|
Upstream branch: f2d282e |
c42ed1c to
3d9c7c9
Compare
8ab9be5 to
5b90760
Compare
|
Upstream branch: 89748ac |
3d9c7c9 to
73e93c4
Compare
3893da1 to
aeddbbb
Compare
|
Upstream branch: 89748ac |
73e93c4 to
442e992
Compare
aeddbbb to
f380900
Compare
1356209 to
ae9bce3
Compare
|
Upstream branch: c30a135 |
e5b55fa to
95411ad
Compare
ae9bce3 to
e263d6e
Compare
|
Upstream branch: 561c803 |
95411ad to
769d1c2
Compare
e263d6e to
77110f5
Compare
|
Upstream branch: b96ddbc |
769d1c2 to
79cf465
Compare
77110f5 to
a2e0474
Compare
|
Upstream branch: 2b38afc |
79cf465 to
e10ed8d
Compare
a2e0474 to
36a8aec
Compare
|
Upstream branch: 8f5ae30 |
e10ed8d to
9ab0aae
Compare
36a8aec to
1a46df6
Compare
|
Upstream branch: 53e760d |
9ab0aae to
33c54ed
Compare
1a46df6 to
404c2ca
Compare
|
Upstream branch: 0e39a73 |
33c54ed to
c1ffc66
Compare
|
Upstream branch: 8742b2d |
|
Upstream branch: 91325f3 |
|
Upstream branch: 3a4a036 |
|
Upstream branch: dfc0f63 |
|
Upstream branch: 0cc5352 |
|
Upstream branch: 24ea63e |
|
Upstream branch: d7ee5bd |
Recently, we encountered the following hungtask: INFO: task kworker/11:2:2981147 blocked for more than 6266 seconds "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. kworker/11:2 D 0 2981147 2 0x80004000 Workqueue: cgroup_destroy css_free_rwork_fn Call Trace: __schedule+0x934/0xe10 schedule+0x40/0xb0 wb_wait_for_completion+0x52/0x80 ? finish_wait+0x80/0x80 mem_cgroup_css_free+0x3a/0x1b0 css_free_rwork_fn+0x42/0x380 process_one_work+0x1a2/0x360 worker_thread+0x30/0x390 ? create_worker+0x1a0/0x1a0 kthread+0x110/0x130 ? __kthread_cancel_work+0x40/0x40 ret_from_fork+0x1f/0x30 This is because the writeback thread has been continuously and repeatedly throttled by wbt, but at the same time, the writes of another thread proceed quite smoothly. After debugging, I believe it is caused by the following reasons. When thread A is blocked by wbt, the I/O issued by thread B will use a deeper queue depth(rwb->rq_depth.max_depth) because it meets the conditions of wb_recent_wait(), thus allowing thread B's I/O to be issued smoothly and resulting in the inflight I/O of wbt remaining relatively high. However, when I/O completes, due to the high inflight I/O of wbt, the condition "limit - inflight >= rwb->wb_background / 2" in wbt_rqw_done() cannot be satisfied, causing thread A's I/O to remain unable to be woken up. Some on-site information: >>> rwb.rq_depth.max_depth (unsigned int)48 >>> rqw.inflight.counter.value_() 44 >>> rqw.inflight.counter.value_() 35 >>> prog['jiffies'] - rwb.rqos.q.backing_dev_info.last_bdp_sleep (unsigned long)3 >>> prog['jiffies'] - rwb.rqos.q.backing_dev_info.last_bdp_sleep (unsigned long)2 >>> prog['jiffies'] - rwb.rqos.q.backing_dev_info.last_bdp_sleep (unsigned long)20 >>> prog['jiffies'] - rwb.rqos.q.backing_dev_info.last_bdp_sleep (unsigned long)12 cat wb_normal 24 cat wb_background 12 To fix this issue, we can use max_depth in wbt_rqw_done(), so that the handling of wb_recent_wait by wbt_rqw_done() and get_limit() will also be consistent, which is more reasonable. Signed-off-by: Julian Sun <[email protected]> Fixes: e34cbd3 ("blk-wbt: add general throttling mechanism")
|
Upstream branch: b19a97d |
Pull request for series with
subject: blk-wbt: Fix io starvation in wbt_rqw_done()
version: 1
url: https://patchwork.kernel.org/project/linux-block/list/?series=987357